home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / test / test_fork1.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  2KB  |  78 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. """This test checks for correct fork() behavior.
  5.  
  6. We want fork1() semantics -- only the forking thread survives in the
  7. child after a fork().
  8.  
  9. On some systems (e.g. Solaris without posix threads) we find that all
  10. active threads survive in the child after a fork(); this is an error.
  11.  
  12. While BeOS doesn't officially support fork and native threading in
  13. the same application, the present example should work just fine.  DC
  14. """
  15. import os
  16. import sys
  17. import time
  18. import thread
  19. from test.test_support import verify, verbose, TestSkipped
  20.  
  21. try:
  22.     os.fork
  23. except AttributeError:
  24.     raise TestSkipped, 'os.fork not defined -- skipping test_fork1'
  25.  
  26. LONGSLEEP = 2
  27. SHORTSLEEP = 0.5
  28. NUM_THREADS = 4
  29. alive = { }
  30. stop = 0
  31.  
  32. def f(id):
  33.     while not stop:
  34.         alive[id] = os.getpid()
  35.         
  36.         try:
  37.             time.sleep(SHORTSLEEP)
  38.         continue
  39.         except IOError:
  40.             continue
  41.         
  42.  
  43.         None<EXCEPTION MATCH>IOError
  44.  
  45.  
  46. def main():
  47.     global stop
  48.     for i in range(NUM_THREADS):
  49.         thread.start_new(f, (i,))
  50.     
  51.     time.sleep(LONGSLEEP)
  52.     a = alive.keys()
  53.     a.sort()
  54.     verify(a == range(NUM_THREADS))
  55.     prefork_lives = alive.copy()
  56.     if sys.platform in [
  57.         'unixware7']:
  58.         cpid = os.fork1()
  59.     else:
  60.         cpid = os.fork()
  61.     if cpid == 0:
  62.         time.sleep(LONGSLEEP)
  63.         n = 0
  64.         for key in alive.keys():
  65.             if alive[key] != prefork_lives[key]:
  66.                 n = n + 1
  67.                 continue
  68.         
  69.         os._exit(n)
  70.     else:
  71.         (spid, status) = os.waitpid(cpid, 0)
  72.         verify(spid == cpid)
  73.         verify(status == 0, 'cause = %d, exit = %d' % (status & 255, status >> 8))
  74.         stop = 1
  75.         time.sleep(2 * SHORTSLEEP)
  76.  
  77. main()
  78.